const db = require("../db/index")
// 导入bcryptjs
const bcrypt = require("bcryptjs")
// 导入token包
const jwt = require("jsonwebtoken")
// 导入密钥
const config = require("../config")

// 用户函数模块
// 1.1 用户注册函数模块
exports.user_Register = (req, res) => {
  // 客户端提交到服务器的用户信息
  const userinfo = req.body

  // 查询用户名是否被占用
  const sql = "SELECT * from user WHERE user_name=?"
  db.query(sql, userinfo.user_name, (err, results) => {
    // 判断sql执行失败
    if (err) {
      return res.cc(err)
    }
    // 用户名占用
    if (results.length > 0) {
      return res.cc("用户名被占用", 2)
    }
    // 使用 bcrypt.hasnSync对密码加密
    userinfo.user_password = bcrypt.hashSync(userinfo.user_password, 10)
    // 定义插入新用户的sql语句
    const sql = "insert into user set ?"
    db.query(
      sql,
      {
        user_name: userinfo.user_name,
        user_password: userinfo.user_password,
        user_power: 0,
      },
      (err, results) => {
        // 判断sql是否执行成功
        if (err) {
          return res.cc(err)
        }

        // 判断影响行数是否为1
        if (results.affectedRows != 1) {
          return res.cc("注册用户失败，请稍后再试")
        }

        res.cc("用户注册成功", 0)
      }
    )
  })
}

// 1.2 用户登录函数模块
exports.user_Login = (req, res) => {
  // 接受表单数据
  const userinfo = req.body
  console.log(userinfo)
  // 定义sql语句
  const sql = "select * from user where user_name=?"
  // 执行sql语句
  db.query(sql, userinfo.user_name, (err, results) => {
    // 执行sql失败
    if (err) return res.cc(err)
    // 执行sql成功，但是获取的数据条数不等于1
    if (results.length !== 1) return res.cc("登录失败")
    // 判断密码是否一致
    const compareResult = bcrypt.compareSync(
      userinfo.user_password,
      results[0].user_password
    )
    if (!compareResult) return res.cc("登录失败")

    // 登录成功

    // 登录成功在服务端生成token字符串
    //  （1） 获取到用户的信息,提取其中的敏感信息
    const user = { ...results[0], user_password: "", user_pic: "" }
    console.log(user)
    console.log(user.user_id)
    if (user.user_power == 1) {
      res.cc("该用户已经封禁", 2)
    } else {
      // 对用户的信息加密，生成token字符串
      const tokenstr = jwt.sign(user, config.jwtSecretKey, {
        expiresIn: config.expiresIn,
      })
      // 调用res.send()将token响应给客户端
      res.send({
        status: 0,
        message: "登录成功",
        token: "Bearer " + tokenstr,
      })
    }
  })
}

// 1.3 用户忘记密码模块函数
exports.user_Forget = (req, res) => {}

// 1.4 用户登录成功后展示该用户的名字
exports.user_Displsy = (req, res) => {
  const sql = "select * from user where user_id=?"
  db.query(sql, req.user.user_id, (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "查询用户信息成功",
      data: results,
    })
  })
}

// 1.5 用户修改自己资料卡(暂时用post))
exports.user_Alter = (req, res) => {
  const userinfo = req.body
  const sql = "insert into user set ?"
  db.query(sql, {}, (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "修改资料成功",
      data: results,
    })
  })
}

// 管理员模块 admin
// 1.1 管理员注册模块函数
exports.admin_Register = (req, res) => {
  // 客户端提交到服务器的用户信息
  const userinfo = req.body

  // 查询管理员名是否被占用
  const sql = "SELECT * from admin WHERE user_name=?"
  db.query(sql, userinfo.user_name, (err, results) => {
    // 判断sql执行失败
    if (err) {
      return res.cc(err)
    }
    // 用户名占用
    if (results.length > 0) {
      return res.cc("管理名被占用", 2)
    }
    // 使用 bcrypt.hasnSync对密码加密
    userinfo.user_password = bcrypt.hashSync(userinfo.user_password, 10)
    // 定义插入新用户的sql语句
    const sql = "insert into admin set ?"
    db.query(
      sql,
      {
        user_name: userinfo.user_name,
        user_password: userinfo.user_password,
      },
      (err, results) => {
        // 判断sql是否执行成功
        if (err) {
          return res.cc(err)
        }

        // 判断影响行数是否为1
        if (results.affectedRows != 1) {
          return res.cc("注册用户失败，请稍后再试")
        }

        res.cc("用户注册成功", 0)
      }
    )
  })
}

// 1.2 管理员登录函数模块
exports.admin_login = (req, res) => {
  // 接受表单数据
  const userinfo = req.body
  console.log(userinfo)
  // 定义sql语句
  const sql = "select * from admin where user_name=?"
  // 执行sql语句
  db.query(sql, userinfo.user_name, (err, results) => {
    // 执行sql失败
    if (err) return res.cc(err)
    // 执行sql成功，但是获取的数据条数不等于1
    if (results.length !== 1) return res.cc("登录失败")
    // 判断密码是否一致
    const compareResult = bcrypt.compareSync(
      userinfo.user_password,
      results[0].user_password
    )
    if (!compareResult) return res.cc("登录失败")

    // 登录成功

    // 登录成功在服务端生成token字符串
    //  （1） 获取到用户的信息,提取其中的敏感信息
    const user = { ...results[0], user_password: "", user_pic: "" }
    console.log(user)
    console.log(user.user_id)
    // 对用户的信息加密，生成token字符串
    const tokenstr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: config.expiresIn,
    })
    // 调用res.send()将token响应给客户端
    res.send({
      status: 0,
      message: "管理员登录成功",
      token: "Bearer " + tokenstr,
    })
  })
}

// 1.3 管理员忘记密码函数模块
exports.admin_Forget = (req, res) => {}

// 1.4 管理端获取所有用户信息
exports.admin_Getuser = (req, res) => {
  const sql = "select * from user"
  db.query(sql, (err, results) => {
    // console.log(results)
    results.map((item) => {
      return (item.user_power = item.user_power === 0 ? false : true)
    })
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "获取用户成功",
      data: results,
    })
  })
}

// 1.5 管理员封禁和解封用户
exports.admin_Userpower = (req, res) => {
  const userinfo = req.body
  console.log(userinfo)
  const sql = "update user set user_power = ? where user_id = ?"
  db.query(sql, [userinfo.user_power, userinfo.user_id], (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "修改用户状态成功",
      data: results,
    })
  })
}

// 1.6 管理员搜索用户模块
exports.admin_Sreachuser = (req, res) => {
  const userinfo = req.query
  console.log(userinfo)
  var name = "%" + req.query.user_name + "%"
  // 定义查询sql
  console.log(userinfo)
  const sql = "SELECT * FROM user WHERE user_name LIKE ?"
  db.query(sql, name, (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "查询该用户成功",
      data: results,
    })
  })
}

// 1.7 管理员删除用户
exports.admin_deleteUser = (req, res) => {
  const userinfo = req.body
  console.log(userinfo)
  const sql = "delete from user where user_id=?"
  db.query(sql, userinfo.user_id, (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "删除用户成功",
      data: results,
    })
  })
}

// 相册函数模块
// 2.1 创建相册函数模块
exports.create_Album = (req, res) => {
  const userinfo = req.body
  console.log(userinfo)
  console.log(req.user.user_id)
  // 定义sql语句
  const sql = "insert into album set ?"
  db.query(
    sql,
    { album_name: userinfo.album_name, album_user_id: req.user.user_id },
    (err, results) => {
      if (err) {
        return res.cc(err)
      }
      // 判断影响行数是否为1
      if (results.affectedRows != 1) {
        return res.cc("创建相册失败，请稍后再试")
      }
      res.cc("创建相册成功", 0)
    }
  )
}

// 2.2 所有登录用户的所有相册 （无参数）
exports.search_userAlbum = (req, res) => {
  const sql =
    "SELECT user_name,album_id,album_name from user,album where user_id=? and user_id=album_user_id"
  db.query(sql, req.user.user_id, (err, results) => {
    // 判断sql是否执行成功
    if (err) {
      return res.cc(err)
    }
    if (results == 0) return res.cc("该用户没有相册", 0)
    res.send({
      status: 0,
      message: "该用户相册查询成功",
      data: results,
    })
  })
}

// 2.3 搜索相册模块
exports.search_Album = (req, res) => {
  const userinfo = req.query
  var name = "%" + req.query.album_name + "%"
  // 定义查询sql
  console.log(userinfo)
  const sql = "SELECT * FROM album WHERE album_name LIKE ?"
  // 执行sql
  db.query(sql, name, (err, results) => {
    if (err) return res.cc(err)
    if (results.length == 0) return res.cc("没有这个相册", 2)
    res.send({
      status: 0,
      message: "查询相册成功",
      data: results,
    })
  })
}

// 2.4 删除相册函数模块
exports.delete_Album = (req, res) => {
  const userinfo = req.body
  // 定义删除sql
  const sql = "DELETE FROM album WHERE album_id = ?"
  // 执行sql语句
  db.query(sql, userinfo.album_id, (err, results) => {
    if (err) return res.cc(err)
    if (results.affectedRows == 0) return res.cc("删除相册失败")
    res.cc("删除相册成功", 0)
  })
}

// 照片模块
// 1.1 查询用户点击哪一个相册，获取相册的id
exports.select_albumid = (req, res) => {
  const userinfo = req.query
  console.log(userinfo)
  // 定义删除sql
  const sql = "select * from picture where pic_album=?"
  // 执行sql语句
  db.query(sql, userinfo.pic_album, (err, results) => {
    if (err) return res.cc(err)
    res.send({
      status: 0,
      message: "成功查询该相册的相片",
      data: results,
    })
  })
}

// 1.2
